using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HerGoS.Interfaces;
using HerGoS.DAO;
using System.Data;
using HerGoS.Administration.Entities;
using HerGoS.Documentos.Exceptions;
using HerGoS.Administration.Engine;

namespace HerGoS.Documentos.Entities
{
	public class GestorTemas
	{
		public static Tema Obtener(int oid)
		{
            try
            {
                IRepository repo = RepositoryFactory.Create(Config.RepositoryDocumentosName);
                repo.Nombre = "TTEMAS_SP";
                repo.AddParameter("@ACCION", "BYID");
                repo.AddParameter("@ID", oid);
                DataTable dt = repo.ExecuteDataTable();
                Tema result = dt.ToGenericList<Tema>(TemaConverter).FirstOrDefault();
                return result;
            }
            catch (Exception ex)
            {
                throw new TemaGetException(ex);
            }		
		}
		
        public static void Guardar(Tema tema)
        {
            try
            {
                IRepository repo = RepositoryFactory.CreateTransactional(Config.RepositoryDocumentosName);
                repo.Nombre = "TTEMAS_PROC";
                repo.AddParameter("@ACCION ",tema.Persistencia);
                repo.AddParameter("@ID", tema.OID);
				repo.AddParameter("@CODIGO", tema.Codigo);
		        repo.AddParameter("@DESCRIPCION", tema.Descripcion);
	        	repo.AddParameter("@IDUSUARIO", HGSContext.Usuario.OID);
                tema.OID = repo.ExecuteReturnValue().ToInteger();
                repo.Commit();

                GestorBitacora.Guardar(tema);
             
            }
            catch (Exception ex)
            {
                throw new TemaSaveException(ex);
            }
        }

        public static void Eliminar(Tema tema)
        {
            tema.Persistencia = EstadoPersistencia.DELETE;
            Guardar(tema);
            tema.Persistencia = EstadoPersistencia.UPDATE;
            tema.Activo = false;
        }


         public static void ReActivar(Tema tema)
        {
            tema.Persistencia = EstadoPersistencia.UNDELETE;
            Guardar(tema);
            tema.Persistencia = EstadoPersistencia.UPDATE;
            tema.Activo = true;
        }

         public static List<Tema> Consultar(string codigo, string descripcion, bool? activo)
         {
             try
             {
                 IRepository repo = RepositoryFactory.Create(Config.RepositoryDocumentosName);
                 repo.Nombre = "TTEMAS_SP";
                 repo.AddParameter("@ACCION", "CONSULTA");
                 repo.AddParameter("@ID", null);
                 repo.AddParameter("@CODIGO", codigo);
                 repo.AddParameter("@DESCRIPCION", descripcion);
                 repo.AddParameter("@ACTIVO", activo);
                 DataTable dt = repo.ExecuteDataTable();
                 List<Tema> result = dt.ToGenericList<Tema>(TemaConverter);
                 return result;
             }
             catch (Exception ex)
             {
                 throw new TemaGetException(ex);
             }
         }

         public static List<Tema> Consultar(string codigo, string descripcion)
         {
              return Consultar(codigo, descripcion, true);

         }

         public static List<Tema> Consultar()
         {
             return Consultar(null, null, null);

         }


		
		#region Converter

        public static Tema TemaConverter(DataRow row)
        {
            Tema tema  =  new Tema
            {
                OID = row["ttemID"].ToInteger(),
				Persistencia = EstadoPersistencia.UPDATE,
				Codigo = row["ttemCODIGO"].ToString(),
		        Descripcion = row["ttemDESCRIPCION"].ToString(),
                Activo = row.IsNull("FECHA_BAJA") ? true : false
            };

            return tema;
        }
        #endregion
	}
}